home *** CD-ROM | disk | FTP | other *** search
/ NeXT Enterprise Objects Framework 1.1 / NeXT Enterprise Objects Framework 1.1.iso / NextDeveloper / Examples / EnterpriseObjects / Validation / AppController.m < prev    next >
Encoding:
Text File  |  1995-02-17  |  2.3 KB  |  66 lines

  1.  
  2. #import "AppController.h"
  3.  
  4. @implementation AppController
  5.  
  6. - appDidInit:sender
  7. {
  8.     EODatabaseChannel *channel = [(id)[controller dataSource] databaseChannel];
  9.     [channel setDelegate:self];
  10.  
  11.     // Set a controller in memory sort by department and then lastName
  12.     [controller setSortOrdering:[NSArray arrayWithObjects:
  13.         [EOKeySortOrdering keyOrderingWithKey:@"departmentName" ordering:NSOrderedAscending],
  14.         [EOKeySortOrdering keyOrderingWithKey:@"lastName" ordering:NSOrderedAscending], nil]];
  15.         
  16.     [controller fetch];
  17.     return self;
  18. }
  19.  
  20. - validatesOnChange:sender
  21. {
  22.     [self setValidatesImmediately:[sender intValue]];
  23.     return self;
  24. }
  25.  
  26. - saveChanges:sender
  27. {
  28.     // we can't call saveToDataSource directly since it doesn't automatically
  29.     // call saveToObjects first (bummer!)
  30.     if ([controller saveToObjects] && [controller saveToDataSource])
  31.         return self;
  32.     return nil;
  33. }
  34.  
  35.  
  36. - (NSDictionary *)databaseChannel:channel
  37.     willRefetchObject:object
  38.     fromSnapshot:(NSDictionary *)snapshot
  39. {
  40.     // Our object is being refetched, and will be refreshed with the given
  41.     // snapshot.  Snapshot is really the set of class properties that would be
  42.     // passed to us in takeValuesFromDictionary (not the one we'd get from
  43.     // snapshotForObject).
  44.     // PROBLEM: if we have uncommitted edits to this object, they could get
  45.     // reset by refetching.
  46.     // OPTIONS:
  47.     // 1) Diff our object against it current (old) snapshot and see if we've
  48.     //    made any changes.  Only allow the update it we have.  Might be slow.
  49.     // 2) If our EO keeps an explicit lock flag, we could check if it's locked
  50.     //    for update.  Sadly, we have no such lock.
  51.     // 3) Always ignore the refetch.  Disadvantage: we'll never be able to
  52.     //    refresh to see new changes made by others in the server.
  53.     // Since efficiency is not a major issue in this example, we'll choose #1.
  54.     NSDictionary *originalSnapshot = [[channel databaseContext] snapshotForObject:object];
  55.     NSDictionary *currentSnapshot = [object valuesForKeys:[originalSnapshot allKeys]];
  56.     if (![originalSnapshot isEqual:currentSnapshot]) {
  57.         // Conflicting update
  58.         // NSLog(@"Attempt to refetch a modified object with current snapshot: %@", currentSnapshot);
  59.         return nil;
  60.     }
  61.     // Okay, no conflict, so allow the update
  62.     return snapshot;
  63. }
  64.  
  65. @end
  66.